<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>计算属性简写</title>
    <script type="text/javascript" src="../js/vue.js"></script>
    <script type="text/javascript">
      Vue.config.productionTip = false;
    </script>
  </head>
  <body>
    <div id="root">
      姓：<input type="text" v-model="firstName" />
      <br />
      名：<input type="text" v-model="lastName" />
      <br />
      其他信息：<input type="text" placeholder="不影响计算属性" />
      <br />
      全名：<span>{{fullName}}</span>
      <br />

      <!--计算属性最重要的一个特性，有缓存功能。
          1：初次读取时会调用get方法，以后都从缓存拿。
          2：依赖的数据发生变化时，才重新调用更新数据。
      -->
      全名：<span>{{fullName}}</span>
      <br />
      全名：<span>{{fullName}}</span>
      <br />
      全名：<span>{{fullName}}</span>
      <br />
    </div>
  </body>

  <script type="text/javascript">
    const vm = new Vue({
      el: "#root",
      data: {
        //data中的即为属性和属性值
        firstName: "张",
        lastName: "三",
        fullName: "张-三",
      },
      //这里使用监视属性实现，用于对比
      watch: {
        firstName(val) {
          //如果要做个性化操作，例如延时返回，只能监听属性实现。   计算属性受限于返回值无法做处理
          setTimeout(() => {
            console.log("姓发生变化，新值:" + val);
            this.fullName = val + this.lastName;
          }, 1000);
        },
        lastName(val) {
          console.log("名发生变化，新值:" + val);
          this.fullName = this.firstName + val;
        },
      },
    });
  </script>
</html>
